// 引入express框架
const express = require('express');
// 处理路径
const path = require('path');
// 创建网站服务器
const app = express();
// 引入body-parser魔模块 用来处理post请求参数
const bodyParser = require('body-parser');
// 导入express-session模块
const session = require('express-session');
// 导入art-tempate模板引擎
const template = require('art-template');
// 导入dateformat第三方模块
const dateFormat = require('dateformat');
// 连接数据库
require('./model/connect');
// 处理post请求参数
app.use(bodyParser.urlencoded({ extended: false }));
// 配置session
app.use(session({
    resave: false,
    // 保存未初始化的cookie 
    // 为true表示当客户端访问浏览器后 不管有没有登录都会保存一个cookie
    // 为false表示当客户端访问浏览器后 只有登录后才会保存一个cookie
    saveUninitialized: false,
    secret: 'secret key',
    // 过期时间 ms
    cookie: { maxAge: 24 * 60 * 60 * 1000 }
}));
// 告诉express框架模板的所在位置
app.set('views', path.join(__dirname, 'views'));
// 告诉express框架模板的默认后缀是什么
app.set('view engine', 'art');
// 当渲染后缀为art的模板时 所使用的模板引擎是什么
app.engine('art', require('express-art-template'));
// 向模板内部导入dateFormate变量
template.defaults.imports.dateFormat = dateFormat;

// 开放静态页面
app.use(express.static(path.join(__dirname, 'public')));

// 拦截请求 判断用户是否登录 该代码要写在路由的前面
app.use('/admin', require('./middleware/loginGuard'));

// 引入路由模块
const home = require('./route/home');
const admin = require('./route/admin');
const { json } = require('express');
// 为路由请求匹配路径
app.use('/home', home);
app.use('/admin', admin);
// 错误处理中间件
app.use((err, req, res, next) => {
    // 将字符串对象转换为对象类型
    // JSON.parse() 
    const result = JSON.parse(err);
    // {path: '/admin/user-edit', message: '密码比对失败,不能进行用户信息的修改', id: id}
    let params = [];
    for (let attr in result) {
        if (attr != 'path') {
            params.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`);
})
//监听端口
app.listen(5000, () => {
    console.log('网站服务器启动成功，请访问http://localhost:5000/admin/login');
});

